fix: Sanitize OSM height values with comma decimal separators #517
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The problem is showcased here: #339
Problem
The
parseHeightmethod inBuildings.javadid not handle common OSM tagging mistakes where commas are used as decimal separators instead of periods (eg.height=89,10instead ofheight=89.10).This caused incorrect parsing:
"89,10"was parsed as8910meters instead of89.10meters"89,1 m"was parsed as891meters instead of89.1metersAccording to the OSM height documentation, commas are incorrect but appear frequently in real-world OSM data.
Problem example as in discussion 339:

Solution
Note: this is similar to the solution that JOSM used here: https://josm.openstreetmap.de/ticket/15719
Added a
sanitizeHeightValue()method that:m)"1,234"remains unchanged)Solution example:

Changes
Modified Files
src/main/java/com/protomaps/basemap/layers/Buildings.javasanitizeHeightValue()parseHeight()to sanitize bothosmHeightandosmMinHeightparametersTest Coverage
src/test/java/com/protomaps/basemap/layers/BuildingsTest.javasanitizeHeightValue()test with proper test casesparseHeightWithCommaDecimalSeparator()integration testExamples
"89,10""89,1""89,1 m""89,1m""89.10""1,234"